package com.cskaoyan.javase.oop1._1basic;

/**
 * @description: 重新理解引用数据类型
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 我们通过数组内存图引入了引用数据类型的概念
 * 现在我们已经知道了，引用数据类类型是由栈上的引用和堆上的对象两部分组成
 * 但是这么理解引用数据类型是和基本数据类型有割裂的,无法统一的,为了统一概念,重新理解它
 *
 * 数据类型的定义: 一组合法的数据集合和基于这个数据集合的一组合法操作，比如int，有固定的取值范围，有固定的操作
 * 我们能不把类的定义往数据类型的定义上靠呢?
 * 类的定义: 属性的集合 + 行为的集合
 * 我们把属性的集合看成是数据的集合,把行为的集合看成是基于成员变量的合法操作的集合
 * 于是就得到了一种自定义类型的定义:
 *      类就是一种自定义类型,在这个类型当中成员变量就是数据,成员方法就是操作
 *      这种自定义类型就是引用数据类型
 * 总结
 * - 一个类的定义，实际上就是定义了一种全新的数据类型，是一种自定义的数据类型
 * - 这种数据类型，和基本数据类型不同，它是我们自己自定义的数据类型（引用数据类型）
 *
 * 基本数据类型和引用数据类型在数据类型定义上的区别:
 *      1,基本数据类型也叫"内嵌类型",它属于JVM当中已经定义完备的类型,"JVM认识它",能够自动开辟空间,存放数据
 *      2,引用数据类型是自定义类型,"JVM不认识它",显然无法帮助我们直接开辟空间,创建它的对象
 *          所以,要想创建引用数据类型的对象,需要先让jvm认识该类型,这个过程称之为"类加载"
 *          只有类加载完毕,才能够创建对象
 *
 * 思考以下问题:
 *      1,类加载的顺序: 应该是类加载在创建对象之前
 *      2,类加载做什么: "类加载"的详细步骤在"反射"这一个章节中学习,这里不详细讲
 *          我们只需要知道: 类加载是通过I/O流读取一个类的class字节码文件到方法区,然后通过一系列创建,完成类加载
 *      3,类加载完毕后,JVM就认识了该类型,这个时候能不能创建对象: 能
 *
 */
public class Demo {
    public static void main(String[] args) {

    }
}
